/* ==================================================================   
 * Created [2009-4-27 下午11:32:55] by Jon.King 
 * ==================================================================  
 * TSS 
 * ================================================================== 
 * mailTo:jinpujun@hotmail.com
 * Copyright (c) Jon.King, 2009-2012 
 * ================================================================== 
 */

package com.jinhe.tss.component.support.web.upload;

import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.Map;


/**
 * <p> SuffixFileValidator.java </p>
 * <p>
 * 文件上传时根据文件后缀检测是否允许上传，如果不允许则返回false，否则返回true
 * </p>
 */
public class SuffixFileValidator implements IFileUploadValidator {

    /** 允许使用的文件后缀（用以限制文件必须为哪几种类型） */
    private String allowSuffix;

    /** 禁止使用的文件后缀 */
    private String forbiddenSuffix;

    public boolean validate(File file, Map<String, String> params) {
        // 得到文件后缀名
        String suffix = getFileSuffix(file);
        // 得到允许后缀名列表
        List<String> allowSuffixes = getSuffixes(allowSuffix);
        // 得到禁止后缀名列表
        List<String> forbiddenSuffixes = getSuffixes(forbiddenSuffix);
        // 判断文件合法性
        if ((allowSuffixes != null && !allowSuffixes.contains(suffix))
                || (forbiddenSuffixes != null && forbiddenSuffixes.contains(suffix))) {
            return false;
        } 
        return true;
    }
    
    public String getErrorMessage() {
        return "上传文件不合法，请按要求上传文件";
    }

    /**
     * 根据后缀字符串获取List列表
     */
    private List<String> getSuffixes(String suffix) {
        if (suffix == null)
            return null;
        return Arrays.asList(suffix.split(","));
    }

    /**
     * 得到文件后缀名
     */
    private String getFileSuffix(File file) {
        String name = file.getName();
        if (name != null) {
            int index = name.lastIndexOf(".");
            if (index > -1) {
                return name.substring(index + 1);
            }
        }
        return "";
    }

    /**
     * 设置允许上传文件后缀
     */
    public void setAllowSuffix(String allowSuffix) {
        this.allowSuffix = allowSuffix;
    }

    /**
     * 设置禁止上传文件后缀
     */
    public void setForbiddenSuffix(String forbiddenSuffix) {
        this.forbiddenSuffix = forbiddenSuffix;
    }
}